﻿package mortal.game.scene3D.layer3D.utils
{
    import Message.BroadCast.*;
    import Message.Public.*;
    import com.gengine.core.frame.*;
    import com.gengine.global.*;
    import com.gengine.utils.*;
    import extend.language.*;
    import mortal.common.tools.*;
    import mortal.game.manager.*;
    import mortal.game.resource.info.*;
    import mortal.game.resource.tableConfig.*;
    import mortal.game.scene3D.layer3D.*;
    import mortal.game.scene3D.player.entity.*;
    import mortal.game.scene3D.player.info.*;

    public class GuildCollectTreeUtil extends Object
    {
        private var _entitysMap:EntityDictionary;
        private var _timeObj:Object;
        private var _jsonObj:Object;
        private var _timeSec:SecTimer;
        private var _len:int = 0;
        private var _h10:int = 3.6e+007;
        private var _h22:int = 7.92e+007;

        public function GuildCollectTreeUtil()
        {
            this._timeObj = {};
            this._jsonObj = {};
            this._entitysMap = new EntityDictionary();
            return;
        }// end function

        public function createEntity(param1:EntityInfo) : void
        {
            var _loc_4:SpritePlayer = null;
            var _loc_2:* = param1.entityInfo;
            var _loc_3:* = BossConfig.instance.getInfoByCode(_loc_2.code);
            if (_loc_3 && (_loc_3.type == EBossType._EBossTypeTree || EBossType._EBossTypeSapling == _loc_3.type))
            {
                _loc_4 = this._entitysMap.getEntity(_loc_2.entityId) as SpritePlayer;
                if (_loc_4 == null)
                {
                    _loc_4 = ThingUtil.entityUtil.getEntity(_loc_2.entityId) as SpritePlayer;
                    this._entitysMap.addEntity(_loc_2.entityId, _loc_4);
                    this._timeObj[EntityUtil.toString(_loc_2.entityId)] = this.parseTime(_loc_2);
                    this._jsonObj[EntityUtil.toString(_loc_2.entityId)] = this.parseJson(_loc_2);
                    var _loc_5:String = this;
                    var _loc_6:* = this._len + 1;
                    _loc_5._len = _loc_6;
                }
            }
            if (this._len > 0)
            {
                this.createTimer();
                this._timeSec.start();
            }
            return;
        }// end function

        private function parseTime(param1:SEntityInfo) : int
        {
            var _loc_2:Object = null;
            var _loc_3:String = null;
            var _loc_4:Date = null;
            if (param1.reserveJs)
            {
                _loc_2 = JSON.parse(param1.reserveJs);
                _loc_3 = _loc_2["boss_deadDt"];
                _loc_4 = DateUtil.getDateByFullTimeString(_loc_3);
                return _loc_4.time / 1000;
            }
            return 0;
        }// end function

        private function parseJson(param1:SEntityInfo) : Object
        {
            var _loc_2:Object = null;
            if (param1.reserveJs)
            {
                _loc_2 = JSON.parse(param1.reserveJs);
                return _loc_2;
            }
            return null;
        }// end function

        private function getJsonById(param1:SEntityInfo) : Object
        {
            return this._jsonObj[EntityUtil.toString(param1.entityId)];
        }// end function

        public function updateJsonStaue(param1:SEntityInfo) : void
        {
            this._jsonObj[EntityUtil.toString(param1.entityId)] = this.parseJson(param1);
            return;
        }// end function

        public function isNormalShow(param1:SEntityInfo) : String
        {
            var _loc_2:* = this.getJsonById(param1);
            if (_loc_2 == null)
            {
                return null;
            }
            var _loc_3:String = null;
            if (_loc_2.hasOwnProperty("notActive"))
            {
                if (_loc_2["notActive"] == 1)
                {
                    _loc_3 = HTMLUtil.addColor(Language.getString(20664), "#ff000");
                    return _loc_3;
                }
            }
            if (_loc_2.hasOwnProperty("had_pick"))
            {
                if (_loc_2["had_pick"] == 1)
                {
                    _loc_3 = HTMLUtil.addColor(Language.getString(20665), "#ff000");
                    return _loc_3;
                }
            }
            return null;
        }// end function

        public function isNotEnougthPerson(param1:SEntityInfo) : String
        {
            var _loc_2:* = this.getJsonById(param1);
            if (_loc_2 == null)
            {
                return null;
            }
            var _loc_3:String = null;
            if (_loc_2.hasOwnProperty("notActive"))
            {
                if (_loc_2["notActive"] == 1)
                {
                    _loc_3 = HTMLUtil.addColor(Language.getString(20664), "#ff0000");
                    return _loc_3;
                }
            }
            return null;
        }// end function

        public function removeEntity(param1:SEntityId) : void
        {
            this._entitysMap.removeEntity(param1);
            this._timeObj[EntityUtil.toString(param1)] = 0;
            this._jsonObj[EntityUtil.toString(param1)] = null;
            var _loc_2:String = this;
            var _loc_3:* = this._len - 1;
            _loc_2._len = _loc_3;
            if (this._len <= 0 && this._timeSec)
            {
                this._timeSec.stop();
                this._len = 0;
            }
            return;
        }// end function

        public function removeAll() : void
        {
            this._entitysMap.removeAll();
            this._timeObj = {};
            this._jsonObj = {};
            if (this._timeSec)
            {
                this._timeSec.stop();
            }
            this._len = 0;
            return;
        }// end function

        private function createTimer() : void
        {
            if (this._timeSec == null)
            {
                this._timeSec = new SecTimer(1);
                this._timeSec.addListener(TimerType.ENTERFRAME, this.onSecTimerHandler);
            }
            return;
        }// end function

        private function onSecTimerHandler(param1:SecTimer) : void
        {
            this.updateCollectTime();
            return;
        }// end function

        private function updateCollectTime() : void
        {
            var _loc_1:SpritePlayer = null;
            var _loc_2:String = null;
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            var _loc_5:BossInfo = null;
            for each (_loc_1 in this._entitysMap.allEntitys)
            {
                
                _loc_2 = "00:00:00";
                _loc_3 = ClockManager.instance.nowDate.time / 1000;
                _loc_4 = 0;
                _loc_5 = BossConfig.instance.getInfoByCode(_loc_1.entityInfo.entityInfo.code);
                if (this.inDayTime())
                {
                    if (EBossType._EBossTypeSapling == _loc_5.type)
                    {
                        _loc_2 = this.isNotEnougthPerson(_loc_1.entityInfo.entityInfo);
                        if (_loc_2 == null)
                        {
                            _loc_4 = this._timeObj[EntityUtil.toString(_loc_1.entityInfo.entityInfo.entityId)];
                            _loc_4 = _loc_4 - _loc_3;
                            _loc_4 = _loc_4 < 0 ? (0) : (_loc_4);
                            _loc_4 = _loc_4;
                            _loc_2 = getResTimeStr(_loc_4);
                            _loc_2 = HTMLUtil.addColor(Language.getStringByParam(20666, _loc_2), "#00ff00");
                        }
                        MonsterPlayer(_loc_1).updateGuildTreeCDTime(_loc_2);
                    }
                    continue;
                }
                if (EBossType._EBossTypeSapling == _loc_5.type)
                {
                    _loc_2 = HTMLUtil.addColor(Language.getString(20667), "#00ff00");
                    MonsterPlayer(_loc_1).updateGuildTreeCDTime(_loc_2);
                }
            }
            return;
        }// end function

        private function inDayTime() : Boolean
        {
            var _loc_2:Date = null;
            var _loc_1:* = ClockManager.instance.DayTime - ClockManager.instance.todayLeftMillisecond;
            if (Global.isDebugModle)
            {
                _loc_2 = ClockManager.instance.nowDate;
                if (_loc_2.minutes >= 0 && _loc_2.minutes < 50)
                {
                    return true;
                }
                return false;
            }
            else
            {
                if (_loc_1 >= this._h10 && _loc_1 <= this._h22)
                {
                    return true;
                }
            }
            return false;
        }// end function

        public static function getResTimeStr(param1:int) : String
        {
            var _loc_3:int = 0;
            var _loc_4:int = 0;
            var _loc_5:int = 0;
            var _loc_2:String = "";
            if (param1 > 0)
            {
                _loc_3 = param1 / 3600;
                _loc_4 = param1 / 60 % 60;
                _loc_5 = param1 % 60;
                _loc_2 = _loc_2 + (_loc_3 < 10 ? ("0" + _loc_3) : ("" + _loc_3));
                _loc_2 = _loc_2 + ":";
                _loc_2 = _loc_2 + (_loc_4 < 10 ? ("0" + _loc_4) : ("" + _loc_4));
                _loc_2 = _loc_2 + ":";
                _loc_2 = _loc_2 + (_loc_5 < 10 ? ("0" + _loc_5) : ("" + _loc_5));
            }
            else
            {
                _loc_2 = "00:00:00";
            }
            return _loc_2;
        }// end function

    }
}
